import Store from './store/index';
// import Auth from './auth/index';
import Http from './http/index';
import Error from './untils/error/index';
import Config from './config/index';
import Router from './untils/router/index'
class UserLogin {
  constructor () {
    this.state = {};
    this._hasShowLoginTip = false;
    this.instance = null;
  }

  // 静态方法作为广为人知的接口
  static getInstance () {
    if (!this.instance) {
      this.instance = new UserLogin();
    }
    return this.instance;
  }

  /**
   * 登录
   * @param {object} objs { mobile: '', password: '' }
   * @returns {boolean} 如果登录成功返回true，登录失败返回false
   *
   * @example login({mobile: '13412341234', password: '123456'})
   */
  async login (objs = { account: '', password: '' }) {
    // ------------------------------------------------发送登录请求
    let res = await Http.post({
      url: Http.urlMap.login,
      data: {
        account: objs.account,
        password: objs.password
      }
    });
    // 根据登录结果判断是否登录成功
    // ①：如果成功
    if (res.code === 1) {
      // ------------------------------------------------为权限系统添加用户及用户的权限分组等信息
      // 添加用户
      /*Auth.setUser({ uid: 'user', name: '用户名' });
      // 添加角色
      Auth.setRole([
        { rid: 'role', name: '角色名' },
        { rid: 'role1', name: '角色名1' },
        { rid: 'role2', name: '角色名2' }
      ]);
      // 添加分组
      Auth.setGroup([
        { gid: 'group', name: '分组名' },
        { gid: 'group1', name: '分组名1' },
        { gid: 'group2', name: '分组名2' }
      ]);
      // 添加权限
      Auth.setPermission([
        { pid: 'permission', name: '权限名' },
        { pid: 'permission1', name: '权限名1' },
        { pid: 'permission2', name: '权限名2' },
        { pid: 'permission3', name: '权限名3' }
      ]);
      // 添加用户分组
      Auth.setUserGroup([
        { uid: 'user', gid: 'group' },
        { uid: 'user', gid: 'group1' }
      ]);
      // 添加用户角色
      Auth.setUserRoles(
        { uid: 'user', rid: 'role' },
        { uid: 'user', rid: 'role1' }
      );
      // 添加分组角色
      Auth.setGroupToRole([{ gid: 'group', rid: 'role' }]);
      // 添加用户权限
      Auth.setUserPermission({ uid: 'user', pid: 'permission' });
      // 添加角色权限
      Auth.setRoleToPermission([
        { rid: 'role', pid: 'permission' },
        { rid: 'role1', pid: 'permission' },
        { rid: 'role2', pid: 'permission' }
      ]);
      // 添加分组权限
      Auth.setGroupToPermission([
        { gid: 'group', pid: 'permission' },
        { gid: 'group1', pid: 'permission' },
        { gid: 'group2   ', pid: 'permission' }
      ]);*/
      // ------------------------------------------------将用户保存到vuex中
      Store.commit('setUserInfo', { userinfo: res.data.userinfo });
      // ------------------------------------------------保存该用户的token数据
      // 返回true
      return true;
    } else {
      // ②：如果失败
      // 返回false
      return false;
    }
  }

  /**
   * 退出登录
   * @param {object} objs
   * @returns {boolean} 如果退出登录成功返回true，否则返回false
   */
  async logout (objs = {}) {

    Store.commit('setUserInfo', { userinfo: {} });
    return true;

/*    let res = await Http.post({
      url: Http.urlMap.logout,
      data: {
        token: _token
      },
      needLogin: true
    });
    if (res.code === 1) {
    Store.commit('setUserInfo', { userinfo: {} });
    // Store.commit('setUserInfo', { user_info: {} });
     return true;
    } else {
     return false;
    }*/
    // 发送退出登录请求
    // 根据结果判断是否退出成功
    // ①：如果成功
    // 清空权限系统的该用户数据
    // 从vuex中删除用户
    // 删除该用户token数据
    // 返回true
    // ②：如果失败
    // 返回false
	// 	return true
  }

  // 更新用户数据
  updateInfo () {}

  /**
   * 检查是否登录
   * @param {object} objs
   * @returns {boolean} 如果登录状态正常，如果正常，返回true，否则返回false
   */
  checkIfLogin (objs = {}) {
    // 检查是否登录
    // ①：检查用户数据是否存在
    // ②：检查token是否过期
    if (this.getToken()) {
      return true; // 登录态正常
    }
    // 退出登录
    this.logout();
    this.showLoginTips();
    return false; // 登录失效
  }

  /**
   * 显示登录提示
   * @param {object} objs
   */
  showLoginTips (objs = {}) {
    if (!this._hasShowLoginTip) {
      this._hasShowLoginTip = true;
      Error.errorNotLoggedIn(
        // success
        () => {
          this._hasShowLoginTip = false;
        },
        // fail
        () => {
          this._hasShowLoginTip = false;
        }
      );
    }
  }

  /**
   * 获取token
   * @returns {boolean} 如果登录状态正常返回token的值，否则返回false
   */
  getToken () {
    let userinfo = this.getUserInfo();
    if (userinfo.token) {
      return userinfo.token;
    }
    return false;
  }

  /**
   * 获取当前用户信息
   * @returns {object} 如果登录状态正常返回用户信息，否则返回空对象{}
   */
  getUserInfo () {
	  // console.log(Store.state.userinfo)
    let userinfo = Store.state.userinfo;
    if (userinfo) {
      if (userinfo.token) {
        return userinfo;
      }
    }
    // 退出登录
    this.logout();
    return {};
  }
}

let _userLogin = new UserLogin();
export default _userLogin;
